package beans;

import java.beans.PropertyChangeEvent;
import java.beans.PropertyChangeListener;
import java.beans.PropertyVetoException;
import java.beans.VetoableChangeListener;
import java.io.Serializable;
import java.util.ArrayList;
import main.EinUndAusgabe;

public class Mitglied implements Serializable, PropertyChangeListener, VetoableChangeListener {
    /** Name des Mitglieds */
    private String name;
    /** Ein- und Ausgabe */
    private EinUndAusgabe io = new EinUndAusgabe();
    /** Backup der zu diskutierenden Themen */
    private ArrayList<String> themen_alt = new ArrayList<>();
    
    /** aktiviert Debug-Ein- / Ausgaben */
    private boolean DEBUG = false;
    
    
    /**
     * Default-Konstruktor
     */
    public Mitglied() {
    }
    
    /**
     * Konstruktor fuer JUnit-Tests
     * @param io 
     *      Textein- und ausgabe
     */
    public Mitglied(EinUndAusgabe io) {
        this.io = io;
    }
    
    /**
     * Setzt den Namen des Mitglieds
     * @param name 
     *      neuer Name
     */
    public void setName(String name) {
        this.name = name;
    }
    
    /**
     * Liefert den Namen des Mitglieds
     * @return 
     *      Mitgliedsname
     */
    public String getName() {
        return this.name;
    }
            
    @Override
    public void propertyChange(PropertyChangeEvent e) {
        String forum = e.getPropertyName();
        ArrayList<String> themen = (ArrayList<String>) e.getNewValue();
        
        System.out.println(name+" erhaelt in "+forum+":\n   "+themen.get(themen.size()-1));  
    }
    
    @Override
    public void vetoableChange(PropertyChangeEvent e) throws PropertyVetoException {
        //Name des aktuellen Forums
        String forum = e.getPropertyName();
        //die neue Themenliste
        ArrayList<String> themen_neu = (ArrayList<String>) e.getNewValue();
        
        //Rueckvetos abfangen
        if (!themen_alt.equals(themen_neu)) {
            //das neuste Thema aus der Liste lesen
            String thema_neu = themen_neu.get(themen_neu.size()-1);
            
            System.out.println(name+" Anfrage in "+forum+": "+thema_neu);
            
            System.out.println("Zustimmen (0) oder Veto (1)");
            int eingabe = -1;
            while (eingabe < 0 || eingabe > 1) {
                eingabe = io.leseInteger();
                if (DEBUG)
                    System.out.println("["+eingabe+"]");
            }

            if (eingabe == 1)
                throw new PropertyVetoException(name, e);
            
            //alte Themenliste zwischenspeichern
            themen_alt = (ArrayList<String>) e.getOldValue();
        }
    }
}
